//
//  main.m
//  12-Foundation-ARC学习
//
//  Created by Jason on 15/10/13.
//  Copyright © 2015年 Jason. All rights reserved.
//

/*
 ARC的使用注意：
    1.不能调用release、retain、autorelease、retainCount
    2.可以重写dealloc,但是不能调用[super dealloc]
    3.@property: 想长期拥有某个对象、应该用strong,其他对象用weak
    4.其他基本数据类型依然用assign
 */

#import <Foundation/Foundation.h>
#import "Dog.h"
#import "Person.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        
        Dog *dog = [[Dog alloc] init];
        
        Person *p = [[Person alloc] init];
        
        p.dog = dog;
        
        NSLog(@"%@", p.dog);
        
        
    }
    return 0;
}

void test() {
    
    // ARC原则: 只要这个对象被强指针引用着,就永远不会被销毁
    // 默认情况下,所有的指针都是强类型指针,强指针\强引用 可以省略__strong
    Dog *d = [[Dog alloc] init];
    
    //        __strong Dog *d2 = d;
    
    __weak Dog *d3 = d;
    
    d = nil;// 由于d为nil后 Dog就没有强引用而被回收了 d3又是弱类型指针
    
    NSLog(@"%@", d3);
}
